package com.vitamo.client;


import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.SimplePager.TextLocation;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.DefaultSelectionEventManager;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.SelectionModel;
import com.vitamo.Beans.UtilisateurB;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.cell.client.ButtonCell;
import com.google.gwt.cell.client.CheckboxCell;
import com.google.gwt.cell.client.EditTextCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.cell.client.SelectionCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Label;
import com.vitamo.client.more;;

public class EspaceAdmin extends AbsolutePanel{
	private GreetingServiceAsync greetingService;
	@UiField(provided = true)
	private SimplePager pager;
	private CellTable<UtilisateurB> table;
	private AbsolutePanel GC;
	private AbsolutePanel GA;
	private SelectionModel<UtilisateurB> selectionModel;
	ListDataProvider<UtilisateurB> dataProvider;
    List<UtilisateurB> list;
    List<UtilisateurB> listSP;
    List<UtilisateurB> listUP;
    VerticalPanel vp;
    public EspaceAdmin(GreetingServiceAsync g){
		listSP=new Vector<UtilisateurB>();
		this.greetingService=g;
		this.setSize("900px","478px");
		TabPanel tabPanel = new TabPanel();
		add(tabPanel, 0, 0);
		tabPanel.setSize("900px", "475px");
		
	    GC = new AbsolutePanel();
		tabPanel.add(GC, "Gestion des Comptes", true);
		GC.setSize("895px", "470px");
		
		Button btnModifier = new Button("Enregistrer Tout");
		btnModifier.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				listUP=new Vector<UtilisateurB>(list);
				greetingService.EnregistrerChange(listUP, new AsyncCallback<Boolean>() {
					
					@Override
					public void onSuccess(Boolean result) {
						if (result) {
							Window.alert("OK");
						}
						else {
							Window.alert("NOT OK");
							
						}
					}
					
					@Override
					public void onFailure(Throwable caught) {
						// TODO Auto-generated method stub
						Window.alert(caught.toString());
					}
				});
			}
		});
		GC.add(btnModifier, 785, 398);
		btnModifier.setSize("110px", "30px");
		
		Button btnRefraiche = new Button("Reinitialiser");
		btnRefraiche.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				GC.remove(vp);
				initialiser();
			}
		});
		GC.add(btnRefraiche, 615, 398);
		
		TextBox textBox = new TextBox();
		GC.add(textBox, 119, 10);
		
		Label lblNewLabel = new Label("Rechercher");
		GC.add(lblNewLabel, 10, 10);
		lblNewLabel.setSize("103px", "22px");
		
		Button btnNewButton = new Button("Supprimer");
		btnNewButton.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				list.removeAll(listSP);
				table.redraw();
			}
		});
		GC.add(btnNewButton, 704, 398);
		initialiser();
		
		
		
		
		
		GA = new AbsolutePanel();
		tabPanel.add(GA, "Gestion des Agences", false);
		GA.setSize("895px", "470px");
		tabPanel.selectTab(0);
		
	}
	public void initialiser(){
		
		greetingService.getUtilisateurs(new AsyncCallback<List<UtilisateurB>>() {
			
			@Override
			public void onSuccess(List<UtilisateurB> result) {
				table = new CellTable<UtilisateurB>();
				table.setWidth("100%");
				
				  selectionModel = new MultiSelectionModel<UtilisateurB>();
				    table.setSelectionModel(selectionModel,DefaultSelectionEventManager.<UtilisateurB> createCheckboxManager());
				    Column<UtilisateurB, Boolean> checkColumn = new Column<UtilisateurB, Boolean>(
				            new CheckboxCell(true, false)) {
				          @Override
				          public Boolean getValue(UtilisateurB object) {
				        	  
				        	  if (selectionModel.isSelected(object)) {
									listSP.add(object);
								}else{
									listSP.remove(object);
								}
								
				            return selectionModel.isSelected(object);
				          }
				        };
				       
				       table.addColumn(checkColumn);
				
				 TextColumn<UtilisateurB> nameColumn = new TextColumn<UtilisateurB>() {
				      @Override
				      public String getValue(UtilisateurB ut) {
				        return ut.getUsername();
				      }
				    };
				    Column<UtilisateurB,String> pwdColumn=new Column<UtilisateurB, String>(new EditTextCell()) {
						
						@Override
						public String getValue(UtilisateurB object) {
							// TODO Auto-generated method stub
							return object.getPwd();
						}
						
					};
						pwdColumn.setFieldUpdater(new FieldUpdater<UtilisateurB, String>() {
						
						@Override
						public void update(int index, UtilisateurB object, String value) {
							object.setPwd(value);
							
						}
						});
				    
					List<String> types = new ArrayList<String>();
					    types.add("Client");
					    types.add("Fournisseur");
					    types.add("Administrateur");
					    types.add("Responsable");
					    SelectionCell typeCell = new SelectionCell(types);
					Column<UtilisateurB, String> typeColumn = new Column<UtilisateurB, String>(
					            typeCell) {
					          @Override
					          public String getValue(UtilisateurB object) {
					            return object.getType();
					          }
					        };
					 typeColumn.setFieldUpdater(new FieldUpdater<UtilisateurB, String>() {
						
						@Override
						public void update(int index, UtilisateurB object, String value) {
							// TODO Auto-generated method stub
							object.setType(value);
						}
					});
					 Column<UtilisateurB,Boolean> statucolum=new Column<UtilisateurB, Boolean>(new CheckboxCell(true,false)) {
						
						@Override
						public Boolean getValue(UtilisateurB object) {
							return object.getStatu();
						}
					};
					statucolum.setFieldUpdater(new FieldUpdater<UtilisateurB, Boolean>() {
						
						@Override
						public void update(int index, UtilisateurB object, Boolean value) {
							// TODO Auto-generated method stub
							object.setStatu(value);
						}
					});
					Column<UtilisateurB,String> morecolum =new Column<UtilisateurB, String>(new ButtonCell()) {
						
						@Override
						public String getValue(UtilisateurB object) {
							// TODO Auto-generated method stub
							return "more";
						}
					};
					morecolum.setFieldUpdater(new FieldUpdater<UtilisateurB, String>() {
						
						@Override
						public void update(int index, UtilisateurB object, String value) {
							// TODO Auto-generated method stub
							more m =new more(object.getInfo());
							m.setGlassEnabled(true);
							m.center();
							m.show();
						}
					});
					
				    table.addColumn(nameColumn, "Name");
				    table.addColumn(pwdColumn, "Mot de passe");
				    table.addColumn(typeColumn, "Type");   
				    table.addColumn(statucolum, "Statut");
				    table.addColumn(morecolum, "Information");
				    dataProvider = new ListDataProvider<UtilisateurB>();
				    dataProvider.addDataDisplay(table);
				    list = dataProvider.getList();
				    for (UtilisateurB u : result) {
				      list.add(u);
				    }
				     table.getColumnSortList().push(nameColumn);
				     table.getColumnSortList().push(pwdColumn);
				     table.getColumnSortList().push(typeColumn);  
				     table.getColumnSortList().push(statucolum);  
				     table.getColumnSortList().push(morecolum); 
				     SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
				     pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true);
				     pager.setDisplay(table);
				     pager.setPageSize(2);
				     vp=new VerticalPanel();
				     vp.setWidth("100%");
				     vp.add(table);
				     vp.add(pager);
				     GC.add(vp,10,64);
				     
				    
				
			}
			
			@Override
			public void onFailure(Throwable caught) {
				Window.alert("Erreur");
			}
		});
		
		    
		
		
	}
}
